package com.cloud.adrian.novel.common.constant;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 错误码枚举类
 * 错误码为字符串类型，共5位，错误来源+四位编号。错误来源分为A/B/C三类
 * A表示错误来源于用户：如用户输入错误、用户权限不足等
 * B表示错误来源于系统：如系统异常、系统资源不足等
 * C表示错误来源于第三方：如第三方接口异常、第三方资源不足等
 * 错误码分为一级宏观错误和二级、三级当不知道如何判定错误场景可直接使用一级
 * @Author: xiangguiliang
 * @version: 1.0
 * @since: 2024/05/03
 */
@Getter
@AllArgsConstructor
public enum ErrorCodeEnum {
    /**
     * 正确的执行返回值
     */
    OK("00000", "一切 ok"),

    /**
     * 用户验证码错误
     */
    USER_VERIFY_CODE_ERROR("A0240", "用户验证码错误"),

    /**
     * 用户名已经存在
     */
    USER_NAME_EXIST("A0111", "用户名已经存在"),

    /**
     * 用户不存在
     */
    USER_ACCOUNT_NOT_EXIST("A0201", "用户不存在"),

    /**
     * 用户密码错误
     */
    USER_PASSWORD_ERROR("A0210", "用户密码错误"),

    /**
     * 用户登录过期
     */
    USER_LOGIN_EXPIRED("A0230", "用户未登录"),

    /**
     * 登录作家时，访问未授权
     */
    USER_UN_AUTH("A0302", "访问未授权"),

    /**
     * 二级宏观错误码，用户请求参数错误
     */
    USER_REQUEST_PARAM_ERROR("A0400", "用户请求参数错误"),

    /**
     * 用户已发表过评论
     */
    USER_COMMENTED("A2001", "用户已发表过评论"),

    /**
     * 小说名已经存在
     */
    AUTHOR_BOOK_NAME_EXIST("A3001", "小说名已存在"),

    /**
     * 用户上传文件异常
     */
    USER_UPLOAD_FILE_ERROR("A0700", "用户上传文件异常"),

    /**
     * 用户上传文件类型不匹配
     */
    USER_UPLOAD_FILE_TYPE_NOT_MATCH("A0701", "用户上传文件类型不匹配"),

    /**
     * 一级宏观错误码，系统执行出错
     */
    SYSTEM_ERROR("B0001", "系统执行出错"),

    /**
     * 一级宏观错误码，调用第三方服务出错
     */
    THIRD_SERVICE_ERROR("C0001", "调用第三方服务出错"),
    ;



    /**
     * 用户错误码
     */
    private final String code;

    /**
     * 错误信息
     */
    private final String message;
}
